package Vue;


import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JTextField;
import Methodes.Solution;

/**
 * Classe permettant d'afficher les informations sur chaque centrale pour un jour donné
 * @author aurelie
 *
 */
public class PanelCentrales extends JPanel{
	/**
	 * logo pour le fioul
	 */
	private JLabel img_fioul;
	/**
	 * logo pour le charbon
	 */
	private JLabel img_charbon;
	/**
	 * logo pour le nucléaire
	 */
	private JLabel img_nucleaire;
	/**
	 * logo pour le gaz
	 */
	private JLabel img_gaz;
	/**
	 * logo pour l'hydraulique
	 */
	private JLabel img_hydraulique;

	/**
	 * label du texte pour le fioul
	 */
	private JLabel titre_fioul;
	/**
	 * label du texte pour le charbon
	 */
	private JLabel titre_charbon;
	/**
	 * label du texte pour le nucléaire
	 */
	private JLabel titre_nucleaire;
	/**
	 * label du texte pour le gaz
	 */
	private JLabel titre_gaz;
	/**
	 * label du texte pour l'hydraulique
	 */
	private JLabel titre_hydraulique;
	/**
	 * Cout minimum de production pour le fioul
	 */
	private JTextField txt_fioul;
	/**
	 * Cout minimum de production pour le charbon
	 */
	private JTextField txt_charbon;
	/**
	 * Cout minimum de production pour le nucléaire
	 */
	private JTextField txt_nucleaire;
	/**
	 * Cout minimum de production pour le gaz
	 */
	private JTextField txt_gaz;
	/**
	 * Cout minimum de production pour le hydraulique
	 */
	private JTextField txt_hydraulique;

	/**
	 * Bar affichant la production en fonction de la capacité max pour le fioul
	 */
	private JProgressBar bar_fioul;
	/**
	 * Bar affichant la production en fonction de la capacité max pour le charbon
	 */
	private JProgressBar bar_charbon;
	/**
	 * Bar affichant la production en fonction de la capacité max pour le nucléaire
	 */
	private JProgressBar bar_nucleaire;
	/**
	 * Bar affichant la production en fonction de la capacité max pour le gaz
	 */
	private JProgressBar bar_gaz;
	/**
	 * Bar affichant la production en fonction de la capacité max pour l'hydraulique
	 */
	private JProgressBar bar_hydraulique;

	/**
	 * Solution trouvée pour cette méthode
	 */
	private Solution solution;
	/**
	 * Jour pour lequel on affiche les productions des centrales
	 */
	private int jour;
	
	/** Logo pour la centrale au fioul */
	private Icon ic_fioul[];
	
	/** Logo pour la centrale au charbon */
	private Icon ic_charbon[];
	
	/** Logo pour la centrale nucleaire */
	private Icon ic_nucleaire[];
	
	/** Logo pour la centre au gaz */
	private Icon ic_gaz[];
	
	/** Logo pour la centrale hydrolique */
	private Icon ic_hydraulique[];
	
	/**
	 * Constructeur prenant la solution trouvée et le jour
	 * @param solution la solution générée 
	 * @param jour le jour à afficher
	 */
	public PanelCentrales(Solution solution, int jour){
		this.solution= solution;
		this.jour = jour;
		this.initValue();
		this.majCentrales();

	}
	
	/**
	 * Affiche le panel de chaque central pour un jour donné
	 */
	public void majCentrales(){
		this.remplirInfo();
		JPanel p1 = this.affichageCentrale(img_nucleaire, titre_nucleaire, txt_nucleaire, bar_nucleaire);
		JPanel p2 = this.affichageCentrale(img_charbon , titre_charbon, txt_charbon, bar_charbon);
		JPanel p3 = this.affichageCentrale(img_fioul, titre_fioul, txt_fioul, bar_fioul);
		JPanel p4 = this.affichageCentrale(img_gaz, titre_gaz, txt_gaz, bar_gaz);
		JPanel p5 = this.affichageCentrale(img_hydraulique, titre_hydraulique, txt_hydraulique, bar_hydraulique);
		this.add(p1);
		this.add(p2);
		this.add(p3);
		this.add(p4);
		this.add(p5);	
		
	}
	
	/**
	 * Remplie les labels avec la solution trouvée
	 */
	private void remplirInfo(){
		this.getProduction(jour, 0, txt_nucleaire, img_nucleaire, ic_nucleaire, bar_nucleaire, solution.getMaxCentrale1(jour));
		this.getProduction(jour, 1, txt_charbon, img_charbon, ic_charbon, bar_charbon, solution.getMaxCentrale2(jour));
		this.getProduction(jour, 2, txt_fioul, img_fioul, ic_fioul, bar_fioul, solution.getMaxCentrale3(jour));
		this.getProduction(jour, 3, txt_gaz, img_gaz, ic_gaz, bar_gaz, solution.getMaxCentrale4(jour));
		this.getProduction(jour, 4, txt_hydraulique, img_hydraulique, ic_hydraulique, bar_hydraulique, solution.getMaxCentrale5(jour));
	}

	/**
	 * Initialise tous les composants de la vue
	 */
	private void initValue(){
		ic_fioul = new ImageIcon[2];
		ic_fioul[0] = new ImageIcon("./img/fioul.png");
		ic_fioul[1] = new ImageIcon("./img/fioul_gris.png");
		img_fioul = new JLabel();
		img_fioul.setIcon(ic_fioul[0]);
		ic_charbon = new ImageIcon[2];
		ic_charbon[0] = new ImageIcon("./img/charbon.png");
		ic_charbon[1] = new ImageIcon("./img/charbon_gris.png");
		img_charbon = new JLabel();
		img_charbon.setIcon(ic_charbon[0]);
		ic_nucleaire = new ImageIcon[2];
		ic_nucleaire[0] = new ImageIcon("./img/nucleaire.png");
		ic_nucleaire[1] = new ImageIcon("./img/nucleaire_gris.png");
		img_nucleaire = new JLabel();
		img_nucleaire.setIcon(ic_nucleaire[0]);
		ic_gaz = new ImageIcon[2];
		ic_gaz[0] = new ImageIcon("./img/gaz.png");
		ic_gaz[1] = new ImageIcon("./img/gaz_gris.png");
		img_gaz = new JLabel();
		img_gaz.setIcon(ic_gaz[0]);
		ic_hydraulique = new ImageIcon[2];
		ic_hydraulique[0] = new ImageIcon("./img/hydraulique.png");
		ic_hydraulique[1] = new ImageIcon("./img/hydraulique_gris.png");
		img_hydraulique = new JLabel();
		img_hydraulique.setIcon(ic_hydraulique[0]);

		Font f = new Font("Arial", Font.BOLD, 12);
		titre_fioul = new JLabel();
		titre_fioul.setText("Fioul");
		titre_fioul.setFont(f);
		titre_charbon = new JLabel();
		titre_charbon.setText("Charbon");
		titre_charbon.setFont(f);
		titre_nucleaire = new JLabel();
		titre_nucleaire.setFont(f);
		titre_nucleaire.setText("Nucleaire");
		titre_gaz = new JLabel();
		titre_nucleaire.setFont(f);
		titre_gaz.setText("Gaz");
		titre_gaz.setFont(f);
		titre_hydraulique = new JLabel();
		titre_hydraulique.setFont(f);
		titre_hydraulique.setText("Hydraulique");

		txt_fioul = new JTextField(4);
		txt_fioul.setHorizontalAlignment(JTextField.CENTER);
		txt_charbon = new JTextField(4);
		txt_charbon.setHorizontalAlignment(JTextField.CENTER);
		txt_nucleaire = new JTextField(4);
		txt_nucleaire.setHorizontalAlignment(JTextField.CENTER);
		txt_gaz = new JTextField(4);
		txt_gaz.setHorizontalAlignment(JTextField.CENTER);
		txt_hydraulique = new JTextField(4);
		txt_hydraulique.setHorizontalAlignment(JTextField.CENTER);
	

		bar_fioul = new JProgressBar(0,Integer.MAX_VALUE);
		bar_charbon = new JProgressBar(0, Integer.MAX_VALUE);
		bar_nucleaire = new JProgressBar(0, Integer.MAX_VALUE);
		bar_gaz = new JProgressBar(0, Integer.MAX_VALUE);
		bar_hydraulique = new JProgressBar(0, Integer.MAX_VALUE);

	}

	/**
	 * Pour une centrale donnée, on remplit chaque composant
	 * @param jour le jour donné
	 * @param centrale la centrale donnée
	 * @param txt le jtextfield contenant la production de la centrale
	 * @param bar la bar affichant la charge de la centrale
	 * @param max la capacité max de cette centrale
	 */
	private void getProduction(int jour, int centrale, JTextField txt, JLabel img, Icon ic[], JProgressBar bar, double max){
	    int nb = (int)solution.getProduction(centrale,jour);
	    if (nb == 0){
	    	img.setIcon(ic[1]);
	    	txt.setEditable(false);
	    	txt.setForeground(Color.GRAY);
	    }
	    else
	    	img.setIcon(ic[0]);
		txt.setText(nb+"");
		bar.setMaximum((int)max);
		bar.setValue((int)nb);
	}

	/**
	 * Panel permettant de créer l'affichage pour une centrale
	 * @param img le logo de la centrale
	 * @param titre le nom de la centrale
	 * @param txt le jtextfield contenant la production
	 * @param bar la bar affichant la charge la centrale
	 * @return
	 */
	private JPanel affichageCentrale(JLabel img, JLabel titre, JTextField txt, JProgressBar bar){
		JPanel centrale = new JPanel(new FlowLayout(FlowLayout.CENTER,0,0));
		centrale.setPreferredSize(new Dimension(110,95));
		JPanel title = new JPanel();
		title.add(titre);
		JPanel maxTag = new JPanel();
		maxTag.setPreferredSize(new Dimension(50,10));
		maxTag.setBackground(Color.RED);
		JPanel logo = new JPanel(new FlowLayout(FlowLayout.CENTER,0,1));
		JPanel donnees = new JPanel(new FlowLayout());
		donnees.setPreferredSize(new Dimension(60,50));
		donnees.add(txt);
		if(bar.getValue() ==  bar.getMaximum()){
			donnees.add(maxTag);
		}
		else{
			donnees.add(bar);
		}
		logo.add(img);
		logo.add(donnees);
		centrale.add(title);
		centrale.add(logo);


		return centrale;

	}

	/**
	 * getter
	 * @return récupération du panel pour l'afficher dans la vue Result
	 */
	public JPanel getPanel(){
		return this;
	}






}
